// pages/detail/detail.js
const db = wx.cloud.database();
const _ = db.command;
var app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    event_id: "",
    btn_type: 0,
    puber_openid: "",
    duration: "",
    eve: {},
    puber: {},
    user: {},
    participants: [] //只存参与者的头像和姓名
  },
  toModify(){
    var puber = this.data.puber
    var user = this.data.user
    var eve = this.data.eve
    if((puber._openid == undefined) || (user._openid == undefined) || eve.bool_end == undefined){
      return
    }
    if((this.data.puber._openid == user._openid) && (eve.bool_end == false) ){
      wx.navigateTo({
        url: '../edit/edit?event_id='+this.data.event_id
      })
    }
  },

  //判断按钮类型
  //0为不显示、1为活动结束、2为结束、3为人数已满、4为参与、5为退出
  btnType() {
    var eve = this.data.eve
    var user = this.data.user
    var puber_openid = this.data.puber_openid
    if ((eve.type != '1') && (puber_openid != user._openid)) {
      return 0
    }
    // 活动是否结束
    if (eve.bool_end == true) {
      return 1
    }
    // 该用户是否为发布者
    if (puber_openid == user._openid) {
      return 2
    }
    // 活动类型为1且人数已经满了
    if (eve.max_num <= eve.num) {
      return 3
    }
    // 用户是否参与
    if (this.isUserJoin(user.list)) {
      return 5
    } else {
      return 4
    }
  },
  // 判断用户是否参与了该活动
  isUserJoin(arr) {
    if (arr == undefined) {
      return false
    }
    var val = this.data.eve._id
    var i
    if (arr) {
      i = arr.length
    }
    while (i--) {
      if (arr[i] === val) {
        return true;
      }
    }
    return false;
  },

  // 点击结束事件
  endEve() {
    //操作之前先判断该用户是不是发布者
    if (this.data.btn_type != 2) {
      return
    }

    wx.showModal({
      title: '提示',
      confirmText: '确定',
      cancelText: '取消',
      content: '确定结束活动?',
      success: res => {
        if (res.confirm) {
          wx.showLoading({
            title: '加载中',
          })
          // 用户点击确定
          db.collection('eve').doc(this.data.eve._id).update({
            data: {
              bool_end: true
            }
          })
          this.setData({
            btn_type:1
          })
          wx.hideLoading()
          wx.showToast({
            title: '活动已结束',
          })
        }
      }
    })

  },

  // 退出活动
  endJoin() {
    //先判断该用户是否已经参与且该活动类型为"1"
    if (this.data.btn_type != 5 || this.data.eve.type != '1') {
      return
    }

    wx.showLoading({
      title: '加载中',
    })
    //从用户列表中删除该活动id
    db.collection('user').doc(this.data.user._id).update({
      data: {
        list: _.pull(this.data.eve._id)
      },
    })

    //从活动参与者列表中删除该用户openid，并将num减一
    db.collection('eve').doc(this.data.eve._id).update({
      data: {
        list: _.pull(this.data.user._openid),
        num: _.inc(-1)
      },
    }).then(res => {
      // 更新页面
      let temp = this.data.participants.filter(
        (item) => item._openid != this.data.user._openid
      )
      this.setData({
        btn_type: 4,
        ["eve.num"]: this.data.eve.num - 1,
        participants: temp
      })
      wx.hideLoading()
      wx.showToast({
        title: '退出成功',
      })
    })
  },

  // 加入活动 
  join() {
    if (this.data.btn_type != 4 || this.data.eve.type != '1') {
      return
    }
    wx.showLoading({
      title: '加载中',
    })
    //从用户列表中增加该活动id
    db.collection('user').doc(this.data.user._id).update({
      data: {
        list: _.push(this.data.eve._id)
      },
    })

    //从活动参与者列表中增加该用户openid,并将num增一
    db.collection('eve').doc(this.data.eve._id).update({
      data: {
        list: _.push(this.data.user._openid),
        num: _.inc(1)
      },
    }).then(res => {
      // 在参与者列表中添加新用户
      let temp = this.data.participants
      temp.push(this.data.user)

      this.setData({
        btn_type: 5,
        ["eve.num"]: this.data.eve.num + 1,
        participants: temp
      })
      wx.hideLoading()
      wx.showToast({
        title: '参加成功',
      })
    })
  },

  // 时间戳之间 相减  结束时间的时间戳 - 当前时间的时间戳
  duration(faultDate, completeTime) {
    if (faultDate >= completeTime) {
      return 0;
    }

    var stime = Date.parse(new Date(faultDate));

    var etime = Date.parse(new Date(completeTime));

    var usedTime = etime - stime; //两个时间戳相差的毫秒数

    var days = Math.floor(usedTime / (24 * 3600 * 1000));

    //计算出小时数

    var leave1 = usedTime % (24 * 3600 * 1000); //计算天数后剩余的毫秒数

    var hours = Math.floor(leave1 / (3600 * 1000));

    //计算相差分钟数

    var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数

    var minutes = Math.floor(leave2 / (60 * 1000));
    var dayStr = days == 0 ? "" : days + "天";
    var hoursStr = hours == 0 ? "" : hours + "时";
    var time = dayStr + hoursStr + minutes + "分";
    return time;

  },

  // 获取参与者列表
  getList(list) {
    wx.cloud.callFunction({
      name: "getPartsList",
      data: {
        list: list
      }
    }).then(res => {
      this.setData({
        participants: this.data.participants.concat(res.result.data)
      })
    })
  },
  //判断活动是否结束
  getBoolEnd() {
    if (this.data.eve.type != '1') {
      return
    }
    var now = Date.parse(new Date())
    var end_time = Date.parse(new Date(this.data.eve.end_time))
    if (now >= end_time) {
      db.collection('eve').doc(this.data.eve._id).update({
        data: {
          bool_end: true
        },
      })

      this.setData({
        ['eve.boo_end']: true
      })
    }
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取活动id
    wx.showLoading({
      title: '加载中',
    })
    this.setData({
      event_id: options.event_id
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    //获取活动信息
    wx.cloud.callFunction({
        name: "dtGetEvent",
        data: {
          event_id: this.data.event_id
        }
      })
      .then(res => {
        this.setData({
          eve: res.result.data,
          puber_openid: res.result.data._openid
        })
        this.setData({
          duration: this.duration(this.data.eve.start_time, this.data.eve.end_time),
        })
        // 内嵌1：获取参与者列表
        //先清空再赋值
        this.setData({
          participants:[]
        })
        var num = this.data.eve.num
        var len = (num - (num % 100)) / 100
        for (var i = 0; i < (len + 1); i++) {
          var start = i * 100
          var end = (i + 1) * 100 - 1
          var list = this.data.eve.list.slice(start, end)
          this.getList(list)
        }

        // 内嵌2：获取发布人信息
        db.collection("user").where({
          _openid: this.data.eve._openid
        }).get().then(res => {
          var data = res.data[0]
          this.setData({
            puber: data
          })
        })

        // 内嵌3：获取用户信息
        db.collection("user").where({
          _openid: app.globalData.open_id
        }).get().then(res => {
          var data = res.data[0]
          this.setData({
            user: data
          })
          this.setData({
            //判断按钮类型
            btn_type: this.btnType()
          })
          wx.hideLoading()
        })
      });
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})